package tech.waterism.topo.engine;

import tech.waterism.topo.context.CalculationContext;
import tech.waterism.topo.model.TopoNode;

/**
 * 节点调度器接口
 * 
 * <p>定义节点调度的标准接口，由 service 层实现具体的调度逻辑
 * <p>这样 core 模块就不需要依赖 service 层的具体实现
 * 
 * <h3>实现示例：</h3>
 * <pre>
 * public class ServiceLayerDispatcher implements NodeDispatcher {
 *     &#64;Autowired
 *     private DispatchCalculate dispatchCalculate;
 *     
 *     &#64;Override
 *     public void dispatch(TopoNode node, CalculationContext context) {
 *         if (node.isReservoir()) {
 *             // 调用原有的水库调度方法
 *             dispatchCalculate.resFunction(...);
 *         } else if (node.isRetentionArea()) {
 *             // 调用蓄滞洪区调度方法
 *             TempDispatchRule.dispatch(...);
 *         }
 *     }
 * }
 * </pre>
 * 
 * @author waterism
 * @since 1.0.0
 */
@FunctionalInterface
public interface NodeDispatcher {
    
    /**
     * 执行节点调度
     * 
     * @param node 拓扑节点
     * @param context 计算上下文
     */
    void dispatch(TopoNode node, CalculationContext context);
}

